<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /*  
   arguments
        - arguments是函数中又一个隐含参数
        - arguments是一个类数组对象（伪数组）
            和数组相似，可以通过索引来读取元素，也可以通过for循环变量，但是它不是一个数组对象，
            不能调用数组的方法
        - arguments用来存储函数的实参
          无论用户是否定义形参，实参都会存储到arguments对象中
          可以通过该对象直接访问实参
   */

    function sum() {
      let num = 0;
      //通过arguments，可以不受参数数量的限制更加灵活的创建函数
      for (var val of arguments) {
        num += val;
      }
      console.log(Array.isArray(arguments));
      return num;
    }
    let res = sum(1, 2, 3, 4);
    console.log(res, "res");
    /* 
    可变参数，在定义函数时可以将参数指定为可变参数
        - 可变参数可以接受任意数量实参，并将他们统一存储到一个数组中返回
        - 可变参数的作用和arguments基本是一致，但是也具有一些不同点
         1.可变参数的名字可以自己指定
         2.可变参数就是一个数组，可以直接使用数组的方法
         3.可以参数可以配合其他参数一起使用
  */
    //当可变参数和普通参数一起使用时，可变参数必须放在最后面
    function fn1(a, b, ...arg) {
      console.log(a, b, arg);
      console.log(Array.isArray(arg));
    }
    fn1(1, 6, 9, 3, 66, 22, 11, 4, 1, 321, 1);
  </script>
</html>


</script>
</html>
